﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Lswweb.IDAL
{
    public interface ITreeTable<T>
    {
        /// <summary>
        /// 根据类别Id取得类别实体类 
        /// </summary>
        /// <param name="id">类别Id</param>
        /// <returns>数据为中取得的类别实体类。</returns>
        T GetModel(int id);

        string GetPath(int id);

        IList<object> GetPathText(int id);

        /// <summary>
        /// 根据实体类集合
        /// </summary>
        /// <param name="ver">版本 如：zh-cn/en</param>
        /// <returns>实体类集合</returns>
        IList<T> GetModels(string ver);
        IList<T> GetModels();

        /// <summary>
        /// 更新一条数据记录
        /// </summary>
        /// <param name="t">实体类。</param>
        bool Update(T t);

        /// <summary>
        /// 根据类别实体类添加一条数据库记录，并返回该记录的Id
        /// </summary>
        /// <param name="t">类别实体类。</param>
        /// <returns>新添加的实体类的Id</returns>
        int Insert(T t);

        /// <summary>
        /// 根据Id删除一条数据库中的类别记录，并级联删除其所有子类
        /// </summary>
        /// <param name="id">要删除的类别Id</param>
        bool Delete(int id);

        /// <summary>
        /// 交换两条类别记录的排序位置
        /// </summary>
        /// <param name="id"></param>
        /// <param name="id2"></param>
        bool ExchangeDisplayOrder(int id, int id2);

        /// <summary>
        /// 更改记录的排序位置，如果新的排序位置超过当前最大排序位置+1则自动设置为当前最大排序位置+1。
        /// </summary>
        /// <param name="id">要更改记录的Id</param>
        /// <param name="newDisplayOrder">新的排序位置</param>
        bool UpdateDisplayOrder(int id, int newDisplayOrder);

        /// <summary>
        /// 更改记录的父Id对像，如果新的父记录不存在则不进行操作。
        /// </summary>
        /// <param name="id">要更改的记录Id</param>
        /// <param name="newParentId">新的父记录Id</param>
        bool UpdateParentId(int id, int newParentId);

        bool UpdateField(int id, string filedName,object value);

        object GetFieldValue(int id, string fieldName);
    }
}
